package com.lpssfxy.offline.test

import com.lpssfxy.offline.utils.AppUtils
import org.apache.spark.mllib.recommendation.{ALS, Rating}

object TestModel {
  def main(args: Array[String]): Unit = {
    // 1. 创建 SparkSession 对象
    val spark = AppUtils.createSparkSession("TestModel",AppUtils.getSparkCores)
    // 2. 读取数据并转换为 Rating样例类
    val ratingRDD = AppUtils.loadRatingData(spark).map(x => Rating(x._1, x._2, x._3))
    // 3. 缓存 ratingRDD，避免重复计算
    ratingRDD.cache()
    // 4. 将ratingDF切分成训练集与测试集，随机切分80%的数据作为训练集，20%作为测试集
    val Array(trainRDD, testRDD) = ratingRDD.randomSplit(Array(0.8, 0.2), 42L)
    // 5. 缓存训练集和测试集，提高后续计算性能
    trainRDD.cache()
    testRDD.cache()
    // 6. 重新训练模型
    val model = ALS.train(trainRDD, 5,15,0.1)
    val predictRdd = model.predict(testRDD.map(x => (x.user, x.product)))
    predictRdd.foreach(x => println(x))

    // 关闭spark
    spark.stop()
  }
}
